//package com.linln.component.wtpshiro.linshi.realm;
//
//import com.linln.component.wtpshiro.linshi.JwtToken;
//import com.linln.component.wtpshiro.util.JwtUtil;
//import com.linln.modules.system.domain.User;
//import com.linln.modules.system.service.UserService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.shiro.authc.*;
//import org.apache.shiro.authz.AuthorizationInfo;
//import org.apache.shiro.realm.AuthorizingRealm;
//import org.apache.shiro.subject.PrincipalCollection;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//@Slf4j
//@Component
//public class JwtRealm extends AuthorizingRealm {
//    /*
//     * 多重写一个support
//     * 标识这个Realm是专门用来验证JwtToken
//     * 不负责验证其他的token（UsernamePasswordToken）
//     * */
//    @Override
//    public boolean supports(AuthenticationToken token) {
//        //这个token就是从过滤器中传入的jwtToken
//        return token instanceof JwtToken;
//    }
//
//    //授权
//    @Override
//    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//        return null;
//    }
//
//    @Autowired
//    private UserService userService;
//
//    //认证
//    //这个token就是从过滤器中传入的jwtToken
//    @Override
//    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//        String token = (String) authenticationToken.getCredentials();
//        String phone = JwtUtil.getUserPhone(token);
//        if(phone ==null || !JwtUtil.verify(token,phone)){
//            throw new AuthenticationException("token 认证失败");
//        }
//        User user = userService.getByPhone(phone);
//        if (user == null) {
//            throw new AuthenticationException("用户不存在");
//        }
//        //判断
//        return new SimpleAuthenticationInfo(user, token, "JwtRealm");
////        这里返回的是类似账号密码的东西，但是jwtToken都是jwt字符串。还需要一个该Realm的类名
//    }
//
//}
